{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "RDKit WARNING: [21:35:02] Enabling RDKit 2019.09.3 jupyter extensions\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "os.chdir('../')\n",
    "from DeepPurpose import dataset\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Beginning Processing...\n",
      "Beginning to extract zip file...\n",
      "Default set to logspace (nM -> p) for easier regression\n",
      "Done!\n"
     ]
    }
   ],
   "source": [
    "SMILES, Target_seq, y = dataset.load_process_DAVIS()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading Dataset from path...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "b'Skipping line 772572: expected 193 fields, saw 205\\nSkipping line 772598: expected 193 fields, saw 205\\n'\n",
      "b'Skipping line 805291: expected 193 fields, saw 205\\n'\n",
      "b'Skipping line 827961: expected 193 fields, saw 265\\n'\n",
      "b'Skipping line 1231688: expected 193 fields, saw 241\\n'\n",
      "b'Skipping line 1345591: expected 193 fields, saw 241\\nSkipping line 1345592: expected 193 fields, saw 241\\nSkipping line 1345593: expected 193 fields, saw 241\\nSkipping line 1345594: expected 193 fields, saw 241\\nSkipping line 1345595: expected 193 fields, saw 241\\nSkipping line 1345596: expected 193 fields, saw 241\\nSkipping line 1345597: expected 193 fields, saw 241\\nSkipping line 1345598: expected 193 fields, saw 241\\nSkipping line 1345599: expected 193 fields, saw 241\\n'\n",
      "b'Skipping line 1358864: expected 193 fields, saw 205\\n'\n",
      "b'Skipping line 1378087: expected 193 fields, saw 241\\nSkipping line 1378088: expected 193 fields, saw 241\\nSkipping line 1378089: expected 193 fields, saw 241\\nSkipping line 1378090: expected 193 fields, saw 241\\nSkipping line 1378091: expected 193 fields, saw 241\\nSkipping line 1378092: expected 193 fields, saw 241\\nSkipping line 1378093: expected 193 fields, saw 241\\nSkipping line 1378094: expected 193 fields, saw 241\\nSkipping line 1378095: expected 193 fields, saw 241\\n'\n",
      "b'Skipping line 1417264: expected 193 fields, saw 205\\n'\n",
      "/home/kh278/.conda/envs/DeepPurpose/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3254: DtypeWarning: Columns (8,9,10,11,12,13,15,17,19,20,26,27,31,32,34,35,46,49,50,51,52,53,54,61,62,63,64,65,66,73,74,75,76,77,78,85,86,87,88,89,90,97,98,99,100,101,102,109,110,111,112,113,114,121,122,123,124,125,126,133,134,135,136,137,138,145,147,148,149,150,157,158,159,160,161,162,169,171,172,173,174) have mixed types.Specify dtype option on import or set low_memory=False.\n",
      "  if (await self.run_code(code, result,  async_=asy)):\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Beginning Processing...\n",
      "There are 66444 drug target pairs.\n",
      "Default set to logspace (nM -> p) for easier regression\n"
     ]
    }
   ],
   "source": [
    "X_drug, X_target, y  = dataset.process_BindingDB('../data/BindingDB_All.tsv',\n",
    "                                         y = 'Kd', \n",
    "                                         binary = False, \n",
    "                                         convert_to_log = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = [i for i in np.unique(SMILES) if i in np.unique(X_drug)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## This means DAVIS and our pretrained dataset is not overlapped. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_data = pd.DataFrame(zip(SMILES, Target_seq, y))\n",
    "df_data.rename(columns={0:'SMILES',\n",
    "                        1: 'Target Sequence',\n",
    "                        2: 'Label'}, \n",
    "                        inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_1000 = df_data.sample(n = 1000, replace = False).reset_index(drop = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading customized repurposing dataset...\n",
      "Checking if pretrained directory is valid...\n",
      "Beginning to load the pretrained models...\n",
      "Using pretrained model and making predictions...\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Predictions from model 1 with drug encoding MPNN and target encoding CNN are done...\n",
      "-------------\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Predictions from model 2 with drug encoding CNN and target encoding CNN are done...\n",
      "-------------\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Predictions from model 3 with drug encoding Morgan and target encoding CNN are done...\n",
      "-------------\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "-- Encoding AAC takes time. Time Reference: 24s for ~100 sequences in a CPU. Calculate your time by the unique target sequence #, instead of the entire dataset.\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Predictions from model 4 with drug encoding Morgan and target encoding AAC are done...\n",
      "-------------\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "-- Encoding AAC takes time. Time Reference: 24s for ~100 sequences in a CPU. Calculate your time by the unique target sequence #, instead of the entire dataset.\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Predictions from model 5 with drug encoding Daylight and target encoding AAC are done...\n",
      "-------------\n",
      "models prediction finished...\n",
      "aggregating results...\n",
      "virtual screening...\n",
      "in total: 1000 drug-target pairs\n",
      "encoding drug...\n",
      "unique drugs: 68\n",
      "drug encoding finished...\n",
      "encoding protein...\n",
      "unique target sequence: 342\n",
      "-- Encoding AAC takes time. Time Reference: 24s for ~100 sequences in a CPU. Calculate your time by the unique target sequence #, instead of the entire dataset.\n",
      "protein encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Virtual Screening Result\n",
      "+------+-----------+-------------+---------------+\n",
      "| Rank | Drug Name | Target Name | Binding Score |\n",
      "+------+-----------+-------------+---------------+\n",
      "|  1   |  Drug 673 |  Target 673 |      0.17     |\n",
      "|  2   |  Drug 223 |  Target 223 |      0.82     |\n",
      "|  3   |  Drug 909 |  Target 909 |      1.26     |\n",
      "|  4   |   Drug 5  |   Target 5  |      1.61     |\n",
      "|  5   |  Drug 147 |  Target 147 |      1.91     |\n",
      "|  6   |  Drug 690 |  Target 690 |      2.21     |\n",
      "|  7   |  Drug 304 |  Target 304 |      2.30     |\n",
      "|  8   |  Drug 212 |  Target 212 |      2.97     |\n",
      "|  9   |  Drug 872 |  Target 872 |      4.31     |\n",
      "|  10  |  Drug 623 |  Target 623 |      4.53     |\n",
      "|  11  |  Drug 796 |  Target 796 |      4.65     |\n",
      "|  12  |  Drug 125 |  Target 125 |      5.22     |\n",
      "|  13  |  Drug 456 |  Target 456 |      5.34     |\n",
      "|  14  |  Drug 221 |  Target 221 |      7.97     |\n",
      "|  15  |  Drug 831 |  Target 831 |      8.69     |\n",
      "|  16  |  Drug 520 |  Target 520 |      8.70     |\n",
      "|  17  |  Drug 149 |  Target 149 |      8.82     |\n",
      "|  18  |  Drug 50  |  Target 50  |      9.54     |\n",
      "|  19  |  Drug 859 |  Target 859 |     10.59     |\n",
      "|  20  |  Drug 345 |  Target 345 |     11.26     |\n",
      "|  21  |  Drug 752 |  Target 752 |     12.16     |\n",
      "|  22  |  Drug 387 |  Target 387 |     12.22     |\n",
      "|  23  |  Drug 983 |  Target 983 |     12.36     |\n",
      "|  24  |  Drug 424 |  Target 424 |     13.19     |\n",
      "|  25  |  Drug 463 |  Target 463 |     14.33     |\n",
      "|  26  |  Drug 870 |  Target 870 |     14.50     |\n",
      "|  27  |  Drug 470 |  Target 470 |     14.63     |\n",
      "|  28  |  Drug 973 |  Target 973 |     15.59     |\n",
      "|  29  |  Drug 784 |  Target 784 |     15.92     |\n",
      "|  30  |  Drug 337 |  Target 337 |     16.16     |\n",
      "checkout ./save_folder/results_aggregation/virtual_screening.txt for the whole list\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from DeepPurpose import oneliner\n",
    "oneliner.virtual_screening(df_1000['Target Sequence'].values, target_name = None, \n",
    "                X_repurpose = df_1000['SMILES'].values, \n",
    "                drug_names = None,\n",
    "                save_dir = './save_folder',               \n",
    "                pretrained_dir = './save_folder/pretrained_models/DeepPurpose_BindingDB/',\n",
    "                convert_y = True,\n",
    "                subsample_frac = 1,\n",
    "                pretrained = True,\n",
    "                split = 'random',\n",
    "                frac = [0.7,0.1,0.2],\n",
    "                agg = 'agg_mean_max',\n",
    "                output_len = 30)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.7789033207464225, 1.918887820416166e-204)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pickle\n",
    "from utils import convert_y_unit\n",
    "with open('./save_folder/results_aggregation/logits_VS_mean_max.pkl', 'rb') as f:\n",
    "    list_ = pickle.load(f)\n",
    "result = convert_y_unit(list_, 'nM', 'p')\n",
    "from scipy.stats import pearsonr\n",
    "\n",
    "pearsonr(result, df_1000.Label.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "fontsize = 17\n",
    "\n",
    "sns.regplot(x=result, y=df_1000.Label.values, line_kws={\"color\":\"r\",\"alpha\":0.7,\"lw\":5})\n",
    "plt.xlabel('Predicted Kd', fontsize = fontsize)\n",
    "plt.ylabel('True Kd', fontsize = fontsize)\n",
    "plt.text(4.6, 9.5, \"R-Squared = 0.7789\", horizontalalignment='left', size='medium', color='red', fontsize = 15)\n",
    "plt.savefig('./correlation.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
